home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / basic / qbcref.com / CKKEYWD.ASM < prev    next >
Encoding:
Assembly Source File  |  1990-03-17  |  3.4 KB  |  91 lines

  1.     title  CKKEYWD
  2.     .model    MEDIUM,BASIC
  3.     .data
  4.  
  5.     ;
  6.     ;   Basic KeyWord Table
  7.     ;
  8. wrdtbl    db    "/$DYNAMIC", "/$INCLUDE", "/$STATIC"
  9.     db    "/ABS", "/ACCESS", "/ALIAS", "/AND", "/ANY"
  10.     db    "/APPEND", "/AS", "/ASC", "/ATN", "/BASE"
  11.     db    "/BEEP", "/BINARY", "/BLOAD", "/BSAVE", "/BYVAL"
  12.     db    "/CALL", "/CALLS", "/CASE"
  13.     db    "/CDBL", "/CDECL", "/CHAIN", "/CHDIR", "/CHR$"
  14.     db    "/CINT", "/CIRCLE", "/CLEAR", "/CLNG", "/CLOSE"
  15.     db    "/CLS", "/COLOR", "/COM", "/COMMAND$", "/COMMON"
  16.     db    "/CONST", "/COS", "/CSNG", "/CSRLIN", "/CVD"
  17.     db    "/CVDMBF", "/CVI", "/CVL", "/CVS", "/CVSMBF"
  18.     db    "/DATA", "/DATE$", "/DECLARE"
  19.     db    "/DEFDBL", "/DEFINT", "/DEFLNG", "/DEFSNG", "/DEFSTR"
  20.     db    "/DIM", "/DO", "/DOUBLE", "/DRAW", "/ELSE"
  21.     db    "/ELSEIF", "/END"
  22.     db    "/ENVIRON", "/ENVIRON$"
  23.     db    "/EOF", "/EQV", "/ERASE", "/ERDEV", "/ERDEV$"
  24.     db    "/ERL", "/ERR", "/ERROR", "/EXIT", "/EXP"
  25.     db    "/FIELD", "/FILEATTR", "/FILES", "/FIX", "/FOR"
  26.     db    "/FRE", "/FREEFILE", "/FUNCTION", "/GET", "/GOSUB"
  27.     db    "/GOTO", "/HEX$", "/IF", "/IMP", "/INKEY$", "/INP"
  28.     db    "/INPUT", "/INPUT$", "/INSTR", "/INT"
  29.     db    "/INTEGER", "/IOCTL", "/IOCTL$", "/IS", "/KEY"
  30.     db    "/KILL", "/LBOUND", "/LCASE$", "/LEFT$", "/LEN"
  31.     db    "/LET", "/LINE", "/LINE INPUT", "/LIST", "/LOC"
  32.     db    "/LOCAL", "/LOCATE", "/LOCK", "/LOF", "/LOG"
  33.     db    "/LONG", "/LOOP", "/LPOS", "/LPRINT", "/LSET"
  34.     db    "/LTRIM$", "/MID$", "/MKD$", "/MKDIR", "/MKDMBF$"
  35.     db    "/MKI$", "/MKL$", "/MKS$", "/MKSMBF$", "/MOD"
  36.     db    "/NAME", "/NEXT", "/NOT", "/OCT$", "/OFF", "/ON"
  37.     db    "/OPEN", "/OR", "/OUT"
  38.     db    "/OUTPUT", "/PAINT", "/PALETTE", "/PCOPY", "/PEEK"
  39.     db    "/PEN", "/PLAY", "/PMAP", "/POINT", "/POKE"
  40.     db    "/POS", "/PRESET", "/PRINT", "/PSET"
  41.     db    "/PUT", "/RANDOM", "/RANDOMIZE", "/READ", "/REDIM"
  42.     db    "/REM", "/RESET", "/RESTORE", "/RESUME", "/RETURN"
  43.     db    "/RIGHT$", "/RMDIR", "/RND", "/RSET", "/RTRIM$"
  44.     db    "/RUN", "/SADD", "/SCREEN", "/SEEK", "/SEG"
  45.     db    "/SETMEM", "/SGN", "/SHARED", "/SHELL", "/SIGNAL"
  46.     db    "/SIN", "/SINGLE", "/SLEEP", "/SOUND", "/SPACE$"
  47.     db    "/SPC", "/SQR", "/STATIC", "/STEP", "/STICK"
  48.     db    "/STOP", "/STR$", "/STRIG", "/STRING", "/STRING$"
  49.     db    "/SUB", "/SWAP", "/SYSTEM", "/TAB", "/TAN"
  50.     db    "/THEN", "/TIME$", "/TIME$", "/TIMER", "/TO"
  51.     db    "/TROFF", "/TRON", "/TYPE", "/UBOUND", "/UCASE$"
  52.     db    "/UEVENT", "/UNLOCK", "/USING", "/UNTIL", "/VAL", "/VARPTR"
  53.     db    "/VARPTR$", "/VARSEG", "/VIEW", "/WAIT", "/WEND"
  54.     db    "/WHILE", "/WIDTH", "/WINDOW", "/WRITE"
  55.     db    "/XOR", "/"
  56. wrdend    equ    $                ; end of keyword table
  57. wrdln    equ    $ - wrdtbl            ; Length of keywords
  58.     .code
  59.  
  60. CKKEYWD proc    strptr:word
  61.     mov    ax,@data            ; setup address of table
  62.     mov    es,ax                ; in es:di
  63.     mov    di,OFFSET wrdtbl
  64.     mov    cx,wrdln            ; length of keyword table
  65.     mov    bx,strptr            ; pointer string struct
  66. scan:    mov    al,"/"                ; scan for slash
  67.     cld
  68.     repne    scasb                ; search for match
  69.     jcxz    notfound            ; not in table
  70.     mov    dx,di                ; save table offset
  71.     mov    al,BYTE PTR es:[di]        ; 1st char after "/"
  72.     mov    si,[bx+2]            ; point to string
  73.     cmp    al,BYTE PTR [si+1]        ; ck 1st char after "/"
  74.     jg    notfound            ;  not a possible match
  75.     jl    @F                ;  get next element
  76.     dec    di                ; 1st char in words
  77.     mov    cx,[bx]                ; lenght of source string
  78.     repe    cmpsb                ; test for a match
  79.     jcxz    found                ; have a match
  80. @@:    mov    di,dx                ; restore table offset
  81.     mov    cx,OFFSET wrdend        ; calculate length left
  82.     sub    cx,di                ; end - current
  83.     jg    scan                ; scan again if > 0
  84. notfound:
  85.     xor    ax,ax                ; clear ax reg
  86.     jmp    SHORT exit            ; go exit
  87. found:    mov    ax,0FFFFH            ; return -1
  88. exit:    ret
  89. CKKEYWD endp
  90.     end
  91.